#ifndef TEST_INTERSECTIONGAME_HPP
#define TEST_INTERSECTIONGAME_HPP

////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include <vector>

#include <SmegCore/Game/DefaultGameImpl.hpp>

#include <SmegTools/Debug/DebugNew.hpp>

namespace sf {
    class Font;
    class Text;
}

namespace smeg {
    namespace math {
        class BoundingVolume;
    }
}

class Test_IntersectionGameImpl : public smeg::core::DefaultGameImpl
{
public:
    ////////////////////////////////////////////////////////////
    /// Constructor/Destructor
    ////////////////////////////////////////////////////////////
                            Test_IntersectionGameImpl();
    virtual                 ~Test_IntersectionGameImpl();

    DECLARE_CLONE_FUNC( Test_IntersectionGameImpl, smeg::core::DefaultGameImpl )

    ////////////////////////////////////////////////////////////
    /// Init the game
    ///
    /// \param _pRenderWindow
    ///
    ////////////////////////////////////////////////////////////
    virtual void            Init( sf::RenderWindow* _pRenderWindow );

    ////////////////////////////////////////////////////////////
    /// DeInit the game
    ///
    ////////////////////////////////////////////////////////////
    virtual void            DeInit();

    ////////////////////////////////////////////////////////////
    /// Manage an incoming event
    ////////////////////////////////////////////////////////////
    virtual void            ManageEvent( const sf::Event& _Event );

    ////////////////////////////////////////////////////////////
    /// Call all the Update in the other systems
    ////////////////////////////////////////////////////////////
    virtual void            Update( float _fDeltaTime );

    ////////////////////////////////////////////////////////////
    /// Call all the Render in the other systems
    ////////////////////////////////////////////////////////////
    virtual void            Render();

private:
    enum eVolumeType {
        eAABB       = 0,
        eCircle     = 1,
        eLine       = 2,
        eOBB        = 3,
        eMAX_VOLUME
    };
    void                    ChangeVolume( int _iNewVolume );
    
    bool                                        m_bPause;
    bool                                        m_bOverlapTest;
    bool                                        m_bContainmentTest;

    // Info
    sf::Font*                                   m_pFont;
    sf::Text*                                   m_pInfo;

    eVolumeType                                 m_eVolumeType;
    std::vector< smeg::math::BoundingVolume* >  m_Volumes;
    smeg::math::BoundingVolume*                 m_pTestVolume;
};

#include <SmegTools/Debug/DebugNewOff.hpp>

#endif // TEST_INTERSECTIONGAME_HPP
